# -*- coding: utf-8 -*-
import scrapy
import employment.items as items
import re
import urllib
import copy


class A58jobSpider(scrapy.Spider):
    name = '58job'
    allowed_domains = ['https://sh.58.com/']
    start_urls = [
        'https://sh.58.com/ruanjiangong/?PGTID=0d202408-0000-2dea-0f12-a991138ca83b&ClickID=3']

    def parse(self, response):
        positionList = response.css("#list_con li")
        for pL in positionList:
            item = items.EmploymentItem()
            # 职称名称
            item['positionName'] = pL.css(
                ".job_title .job_name .name::text").extract_first()
            # 职位薪酬
            positionAward = pL.css(
                ".job_title .job_salary::text").extract_first()
            matchObj = re.search(
                r'([0-9.]*?)-([0-9.]*?)', str(positionAward))
            if matchObj != None:
                item['positionAwardMin'] = matchObj.group(1)
                item['positionAwardMax'] = matchObj.group(2)
            else:
                raise RuntimeError('error positionAward:' + positionAward)

            # item['positionAward'] = pL.css(
            #     ".job_title .job_salary::text").extract_first()
            # 发布时间
            # 注：不知道发布时间
            # 工作经验要求
            experienceTime = pL.css(
                ".job_comp .job_require .jingyan::text").extract_first()
            # 公司所在城市
            item['ltdCity'] = '上海'  # 该爬虫爬取的都是上海的职位，因为58同城是按城市查找职位的
            # 学历要求
            item['education'] = pL.css(
                ".job_comp .job_require .xueli::text").extract_first()
            # 福利待遇
            # 将福利进行字符串连接，以/为分隔符
            item['walfare'] = "/".join(pL.css(".job_wel span::text").extract())
            # 公司名称
            item['ltdName'] = pL.css(
                ".job_comp .comp_name a::text").extract_first()

            # 职位详情链接
            item['positionLink'] = pL.css(
                ".job_title .job_name a::attr(href)").extract_first()
            # 该职位详情是跳转链接，可以直接点击
            # url = null
            # 公司链接
            # 注意：公司的链接点不进去，职位里面也没提及，找不到这些信息！
            # item['ltdLink'] = null
            # 调用详情页面
            yield scrapy.Request(item['positionLink'], callback=self.parse_content, meta={'item': copy.deepcopy(item)})

        # 获取下一页的链接
        next_page_url = self.getNextPageUrl(response)

        if next_page_url != None:
            # 如果还有下一页，则继续爬取下一页
            yield scrapy.Request(next_page_url, callback=self.parse)

    def parse_content(self, response):
        '''
        在职位详情页解析公司规模
        '''
        item = response.meta['data']  # 获取传入的参数
        # 公司规模
        item['ltdScale'] = response.css(
            ".con .rightCon .item_con .comp_baseInfo_scale::text").extract_first()
        yield item

    def getNextPageUrl(self, response, next_page_num=None):
        '''
        返回下一页的url
        @param next_page_num: 指定下一页的页码，默认为当前页的下一页
        @return 下一页的url，如果下一页的页码超出范围，则返回None
        '''

        next_page_url = response.css(
            ".con .main .pagesout .next::attr(href)").extract_first()

        return next_page_url
